package test.other.concurrentDemo;


import java.util.concurrent.SynchronousQueue;

public class SynchronousQueueDemo {
	 public static void main(String[] args) {  
		 
	        SynchronousQueue<Integer> queue = new SynchronousQueue<Integer>();  
	      new Product(queue).start();  //生产者   
	      new Customer(queue).start();  //消费者
	       
	    }  
	    static class Product extends Thread{  
	        SynchronousQueue<Integer> queue;  
	        public Product(SynchronousQueue<Integer> queue){  
	            this.queue = queue;  
	        }  
	        @Override  
	        public void run(){ 
	        	int rand = 0;
	            while(true){  
	                rand++;
	                System.out.println("每3秒生产了一个产品："+rand);  
	             //   boolean boo = queue.offer(rand);
	             //   System.out.println(rand+";boo: "+boo);
	                System.out.println("放入queue中...");
	                try {
						queue.put(rand);
					} catch (InterruptedException e1) {
						e1.printStackTrace();
					}
	                System.out.println("已消费"+rand+"...");
	                try {  
	                    Thread.sleep(1*1000);  
	                } catch (InterruptedException e) {  
	                    e.printStackTrace();  
	                } 
	            }  
	        }  
	    }  
	    static class Customer extends Thread{  
	        SynchronousQueue<Integer> queue;  
	        public Customer(SynchronousQueue<Integer> queue){  
	            this.queue = queue;  
	        }  
	        @Override  
	        public void run(){  
	            while(true){
	            	
	                try {  
	                    System.out.println("每5秒消费一个产品:");
	                    queue.take();
	                    System.out.println("------------------------------------------"); 
	                } catch (InterruptedException e) {  
	                    e.printStackTrace();  
	                }  
	                try {  
	                    Thread.sleep(5*1000);  
	                } catch (InterruptedException e) {  
	                    e.printStackTrace();  
	                } 
	                
	            }  
	        }  
	    }  
	    /** 
	     * 运行结果： 
	     *  生产了一个产品：464 
	        等待三秒后运送出去... 
	        消费了一个产品:773 
	        ------------------------------------------ 
	        生产了一个产品：547 
	        等待三秒后运送出去... 
	        消费了一个产品:464 
	        ------------------------------------------ 
	        生产了一个产品：87 
	        等待三秒后运送出去... 
	        消费了一个产品:547 
	        ------------------------------------------ 
	     */  
}
